"""
逻辑回归：拟合线性数据，产生的y用sigmoid函数缩放到[0,1]区间，以0.5为界分类。
优点：1.产生的是0到1之间的概率
      2.小规模数据集上效果比树模型好
      3.拟合线性数据非常好 金融行业广泛应用
      4.快 很快
      5.抗噪能力强
正则化：L1正则化偏向保护小参数，会把许多大参数变成0，从而产生稀疏矩阵
        L2正则化偏向保护大参数，只是把参数都缩小，防止过拟合
        loss = J + 1/c * L , c越小，L占比越大，越限制参数，越防止过拟合，太小会欠拟合
一般使用L2
数据量特别别大 维度特别高可以使用L1
总的来说是先试L2 如果仍过拟合 就用L1

"""

from sklearn.linear_model import LogisticRegression as LR
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import learning_curve
import matplotlib.pyplot as plt


x, y = load_breast_cancer(return_X_y=True)

lrl1 = LR(penalty="l1", solver="liblinear", C=1, max_iter=1000)  # L1正则化必须改solver
lrl2 = LR(penalty="l2", solver="liblinear", C=1, max_iter=1000)  # GD迭代1000次 默认100

# train_size, train_acc, test_acc = learning_curve(lrl1, x, y, cv=5)
train_size, train_acc, test_acc = learning_curve(lrl2, x, y, cv=5)

# print(x.shape)
# print(train_size)

plt.plot(train_size, train_acc.mean(axis=1), label='train_acc')
plt.plot(train_size, test_acc.mean(axis=1), label='test_acc')
plt.legend()
plt.show()
